8. String

汉字进行 UTF-8 编码,每个汉字占3个字节。进行 GDK 编码,每个汉字占2个字节。ISO-8859-1 则占一个字节。

为什么要有包装类

因为 Java 的某些特性和 API,例如泛型和集合,不支持基本数据类型,所以必须把基本数据类型转换为包装类的对象。

基本数据类型对应的包装类

1
2
3
4
5
6
7
8
byte -> Byte
short -> Short
int -> Integer
long -> Long
float -> Float
double -> Double
char -> Character
boolean -> Boolean

基本数据类型和包装类之间的转换

装箱

装箱就是把基本数据类型转换为包装类对象

1
2
Integer i = new Integer(10)   //手动装箱
Integer i = 10; //自动装箱

拆箱

拆箱就是把包装类的对象转换为基本数据类型

1
2
3
Integer i = new Integer(10);
int a = i.intValue(); //手动拆箱
int a = i; //自动拆箱

字符串转换为基本数据类型

1
2
3
String str = "123";
int i = Integer.parseInt(str);
int i = Integer.ValueOf(str);

基本数据类型转换为字符串

1
2
3
int a = 10;
String str = a + "";
String str = String.valueOf(a);

java.lang.String

特点:

  1. 字符串对象的不可变性
  2. String 类型是 final 修饰的,不能被继承

内部的存储结构

  1. JDK 1.9 之前: char []
  2. JDK 1.9 之后: byte[]

常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1. length: 求字符串的长度
2. trim: 去掉前后空格
3. equals: 比较两个字符串内容是否相同
4. equalsIgnoreCase:比较两个字符串内容是否相同,忽略大小写
5. toUpperCase: 转大写
6. toLowerCase: 转小写
7. concat:字符串拼接
8. contains:是否包含
9. toCharArray:转换为字符数组
10. charAt:返回某个索引位置的字符
11. itern:把结果放到常量池中
12. startWith:判断字符串是否以 xxx 开头
13. endsWith:判断字符串是否以 xxx 结尾
14. indexOf:查找某个字符或者字符串在当前字符串中的索引位置,是从左往右进行查找
15. lastIndexOf:查找某个字符或者字符串在当前字符串中的索引位置,是从右往左进行查找
16. subString:从当前字符串截取一个子串
17. matches:判断当前字符串是否匹配xx规则
18. replace:替换字符串,不支持正则
19. replaceFirst:替换首次出现的字符串,支持正则
20. replaceAll:替换所有出现的字符串,支持正则
21. split:拆分
22. isEmpty:判断当前字符串是否为空
23. getBytes:将当前字符串按照某种字符编码进行编码,从而转为字节序列
24. String(bytes[]…):把字符序列按照某种字符编码进行解码,从而转换为字符
25. String(char[]…):把字符串数组重新构建为一个字符串

与字节数据的转换

1
2
转为字节数组(编码):方法为 getBytes(),返回值为 byes[]
转为字符串(解码):方法为 String(byes[])

与字符数据的转换

1
2
转成字符数组:toCharArray()
转为字符串:new String(char[])